home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / libraries / auth / http.auth.lib.php < prev   
PHP Script  |  2004-06-16  |  11KB  |  279 lines

  1. <?php
  2. /* $Id: http.auth.lib.php,v 2.5 2004/06/16 23:44:47 lem9 Exp $ */
  3. // vim: expandtab sw=4 ts=4 sts=4:
  4.  
  5. // +--------------------------------------------------------------------------+
  6. // | Set of functions used to run http authentication.                        |
  7. // | NOTE: Requires PHP loaded as a Apache module.                            |
  8. // +--------------------------------------------------------------------------+
  9.  
  10.  
  11. /**
  12.  * Displays authentication form
  13.  *
  14.  * @global  string    the font face to use in case of failure
  15.  * @global  string    the default font size to use in case of failure
  16.  * @global  string    the big font size to use in case of failure
  17.  *
  18.  * @return  boolean   always true (no return indeed)
  19.  *
  20.  * @access  public
  21.  */
  22. function PMA_auth()
  23. {
  24.     global $right_font_family, $font_size, $font_bigger;
  25.  
  26.     header('WWW-Authenticate: Basic realm="phpMyAdmin ' . sprintf($GLOBALS['strRunning'], (empty($GLOBALS['cfg']['Server']['verbose']) ? str_replace('\'', '\\\'',$GLOBALS['cfg']['Server']['host']) : str_replace('\'', '\\\'', $GLOBALS['cfg']['Server']['verbose']))) .  '"');
  27.     header('HTTP/1.0 401 Unauthorized');
  28.     header('status: 401 Unauthorized');
  29.  
  30.     // Defines the charset to be used
  31.     header('Content-Type: text/html; charset=' . $GLOBALS['charset']);
  32.     ?>
  33. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  34.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  35. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>" lang="<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>" dir="<?php echo $GLOBALS['text_dir']; ?>">
  36.  
  37. <head>
  38. <title><?php echo $GLOBALS['strAccessDenied']; ?></title>
  39. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $GLOBALS['charset']; ?>" />
  40. <style type="text/css">
  41. <!--
  42. body     {font-family: <?php echo $right_font_family; ?>; font-size: <?php echo $font_size; ?>; color: #000000}
  43. h1       {font-family: <?php echo $right_font_family; ?>; font-size: <?php echo $font_bigger; ?>; font-weight: bold}
  44. //-->
  45. </style>
  46. <script language="JavaScript" type="text/javascript">
  47. <!--
  48.     /* added 2004-06-10 by Michael Keck
  49.      *       we need this for Backwards-Compatibility and resolving problems
  50.      *       with non DOM browsers, which may have problems with css 2 (like NC 4)
  51.     */
  52.     var isDOM      = (typeof(document.getElementsByTagName) != 'undefined'
  53.                       && typeof(document.createElement) != 'undefined')
  54.                    ? 1 : 0;
  55.     var isIE4      = (typeof(document.all) != 'undefined'
  56.                       && parseInt(navigator.appVersion) >= 4)
  57.                    ? 1 : 0;
  58.     var isNS4      = (typeof(document.layers) != 'undefined')
  59.                    ? 1 : 0;
  60.     var capable    = (isDOM || isIE4 || isNS4)
  61.                    ? 1 : 0;
  62.     // Uggly fix for Opera and Konqueror 2.2 that are half DOM compliant
  63.     if (capable) {
  64.         if (typeof(window.opera) != 'undefined') {
  65.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  66.             if ((browserName.indexOf('konqueror 7') == 0)) {
  67.                 capable = 0;
  68.             }
  69.         } else if (typeof(navigator.userAgent) != 'undefined') {
  70.             var browserName = ' ' + navigator.userAgent.toLowerCase();
  71.             if ((browserName.indexOf('konqueror') > 0) && (browserName.indexOf('konqueror/3') == 0)) {
  72.                 capable = 0;
  73.             }
  74.         } // end if... else if...
  75.     } // end if
  76.     document.writeln('<link rel="stylesheet" type="text/css" href="<?php echo defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : './'; ?>css/phpmyadmin.css.php?lang=<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>&js_frame=right&js_isDOM=' + isDOM + '" />');
  77. //-->
  78. </script>
  79. <noscript>
  80.     <link rel="stylesheet" type="text/css" href="<?php echo defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : './'; ?>css/phpmyadmin.css.php?lang=<?php echo $GLOBALS['available_languages'][$GLOBALS['lang']][2]; ?>&js_frame=right" />
  81. </noscript>
  82. </head>
  83.  
  84. <body bgcolor="<?php echo $GLOBALS['cfg']['RightBgColor']; ?>">
  85.  
  86. <?php include('./config.header.inc.php'); ?>
  87.  
  88. <br /><br />
  89. <center>
  90.     <h1><?php echo sprintf($GLOBALS['strWelcome'], ' phpMyAdmin ' . PMA_VERSION); ?></h1>
  91. </center>
  92. <br />
  93. <div class="warning"><p><?php echo $GLOBALS['strWrongUser']; ?></p></div>
  94.  
  95. <?php include('./config.footer.inc.php'); ?>
  96.  
  97. </body>
  98.  
  99. </html>
  100.     <?php
  101.     echo "\n";
  102.     exit();
  103.  
  104.     return TRUE;
  105. } // end of the 'PMA_auth()' function
  106.  
  107.  
  108. /**
  109.  * Gets advanced authentication settings
  110.  *
  111.  * @global  string    the username if register_globals is on
  112.  * @global  string    the password if register_globals is on
  113.  * @global  array     the array of server variables if register_globals is
  114.  *                    off
  115.  * @global  array     the array of environment variables if register_globals
  116.  *                    is off
  117.  * @global  string    the username for the ? server
  118.  * @global  string    the password for the ? server
  119.  * @global  string    the username for the WebSite Professional server
  120.  * @global  string    the password for the WebSite Professional server
  121.  * @global  string    the username of the user who logs out
  122.  *
  123.  * @return  boolean   whether we get authentication settings or not
  124.  *
  125.  * @access  public
  126.  */
  127. function PMA_auth_check()
  128. {
  129.     global $PHP_AUTH_USER, $PHP_AUTH_PW;
  130.     global $REMOTE_USER, $AUTH_USER, $REMOTE_PASSWORD, $AUTH_PASSWORD;
  131.     global $HTTP_AUTHORIZATION;
  132.     global $old_usr;
  133.  
  134.     // Grabs the $PHP_AUTH_USER variable whatever are the values of the
  135.     // 'register_globals' and the 'variables_order' directives
  136.     // loic1 - 2001/25/11: use the new globals arrays defined with php 4.1+
  137.     if (empty($PHP_AUTH_USER)) {
  138.         if (!empty($_SERVER) && isset($_SERVER['PHP_AUTH_USER'])) {
  139.             $PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER'];
  140.         }
  141.         else if (isset($REMOTE_USER)) {
  142.             $PHP_AUTH_USER = $REMOTE_USER;
  143.         }
  144.         else if (!empty($_ENV) && isset($_ENV['REMOTE_USER'])) {
  145.             $PHP_AUTH_USER = $_ENV['REMOTE_USER'];
  146.         }
  147.         else if (@getenv('REMOTE_USER')) {
  148.             $PHP_AUTH_USER = getenv('REMOTE_USER');
  149.         }
  150.         // Fix from Matthias Fichtner for WebSite Professional - Part 1
  151.         else if (isset($AUTH_USER)) {
  152.             $PHP_AUTH_USER = $AUTH_USER;
  153.         }
  154.         else if (!empty($_ENV) && isset($_ENV['AUTH_USER'])) {
  155.             $PHP_AUTH_USER = $_ENV['AUTH_USER'];
  156.         }
  157.         else if (@getenv('AUTH_USER')) {
  158.             $PHP_AUTH_USER = getenv('AUTH_USER');
  159.         }
  160.     }
  161.     // Grabs the $PHP_AUTH_PW variable whatever are the values of the
  162.     // 'register_globals' and the 'variables_order' directives
  163.     // loic1 - 2001/25/11: use the new globals arrays defined with php 4.1+
  164.     if (empty($PHP_AUTH_PW)) {
  165.         if (!empty($_SERVER) && isset($_SERVER['PHP_AUTH_PW'])) {
  166.             $PHP_AUTH_PW = $_SERVER['PHP_AUTH_PW'];
  167.         }
  168.         else if (isset($REMOTE_PASSWORD)) {
  169.             $PHP_AUTH_PW = $REMOTE_PASSWORD;
  170.         }
  171.         else if (!empty($_ENV) && isset($_ENV['REMOTE_PASSWORD'])) {
  172.             $PHP_AUTH_PW = $_ENV['REMOTE_PASSWORD'];
  173.         }
  174.         else if (@getenv('REMOTE_PASSWORD')) {
  175.             $PHP_AUTH_PW = getenv('REMOTE_PASSWORD');
  176.         }
  177.         // Fix from Matthias Fichtner for WebSite Professional - Part 2
  178.         else if (isset($AUTH_PASSWORD)) {
  179.             $PHP_AUTH_PW = $AUTH_PASSWORD;
  180.         }
  181.         else if (!empty($_ENV) && isset($_ENV['AUTH_PASSWORD'])) {
  182.             $PHP_AUTH_PW = $_ENV['AUTH_PASSWORD'];
  183.         }
  184.         else if (@getenv('AUTH_PASSWORD')) {
  185.             $PHP_AUTH_PW = getenv('AUTH_PASSWORD');
  186.         }
  187.     }
  188.     // Gets authenticated user settings with IIS
  189.     if (empty($PHP_AUTH_USER) && empty($PHP_AUTH_PW)
  190.         && function_exists('base64_decode')) {
  191.         if (!empty($HTTP_AUTHORIZATION)
  192.             && substr($HTTP_AUTHORIZATION, 0, 6) == 'Basic ') {
  193.             list($PHP_AUTH_USER, $PHP_AUTH_PW) = explode(':', base64_decode(substr($HTTP_AUTHORIZATION, 6)));
  194.         }
  195.         else if (!empty($_ENV)
  196.              && isset($_ENV['HTTP_AUTHORIZATION'])
  197.              && substr($_ENV['HTTP_AUTHORIZATION'], 0, 6) == 'Basic ') {
  198.             list($PHP_AUTH_USER, $PHP_AUTH_PW) = explode(':', base64_decode(substr($_ENV['HTTP_AUTHORIZATION'], 6)));
  199.         }
  200.         else if (@getenv('HTTP_AUTHORIZATION')
  201.                  && substr(getenv('HTTP_AUTHORIZATION'), 0, 6) == 'Basic ') {
  202.             list($PHP_AUTH_USER, $PHP_AUTH_PW) = explode(':', base64_decode(substr(getenv('HTTP_AUTHORIZATION'), 6)));
  203.         }
  204.     } // end IIS
  205.  
  206.     // User logged out -> ensure the new username is not the same
  207.     if (!empty($old_usr)
  208.         && (isset($PHP_AUTH_USER) && $old_usr == $PHP_AUTH_USER)) {
  209.         $PHP_AUTH_USER = '';
  210.     }
  211.  
  212.     // Returns whether we get authentication settings or not
  213.     if (empty($PHP_AUTH_USER)) {
  214.         return FALSE;
  215.     } else {
  216.         if (get_magic_quotes_gpc()) {
  217.             $PHP_AUTH_USER = stripslashes($PHP_AUTH_USER);
  218.             $PHP_AUTH_PW   = stripslashes($PHP_AUTH_PW);
  219.         }
  220.         return TRUE;
  221.     }
  222. } // end of the 'PMA_auth_check()' function
  223.  
  224.  
  225. /**
  226.  * Set the user and password after last checkings if required
  227.  *
  228.  * @global  array     the valid servers settings
  229.  * @global  integer   the id of the current server
  230.  * @global  array     the current server settings
  231.  * @global  string    the current username
  232.  * @global  string    the current password
  233.  *
  234.  * @return  boolean   always true
  235.  *
  236.  * @access  public
  237.  */
  238. function PMA_auth_set_user()
  239. {
  240.     global $cfg, $server;
  241.     global $PHP_AUTH_USER, $PHP_AUTH_PW;
  242.  
  243.     // Ensures valid authentication mode, 'only_db', bookmark database and
  244.     // table names and relation table name are used
  245.     if ($cfg['Server']['user'] != $PHP_AUTH_USER) {
  246.         $servers_cnt = count($cfg['Servers']);
  247.         for ($i = 1; $i <= $servers_cnt; $i++) {
  248.             if (isset($cfg['Servers'][$i])
  249.                 && ($cfg['Servers'][$i]['host'] == $cfg['Server']['host'] && $cfg['Servers'][$i]['user'] == $PHP_AUTH_USER)) {
  250.                 $server        = $i;
  251.                 $cfg['Server'] = $cfg['Servers'][$i];
  252.                 break;
  253.             }
  254.         } // end for
  255.     } // end if
  256.  
  257.     $cfg['Server']['user']     = $PHP_AUTH_USER;
  258.     $cfg['Server']['password'] = $PHP_AUTH_PW;
  259.  
  260.     return TRUE;
  261. } // end of the 'PMA_auth_set_user()' function
  262.  
  263.  
  264. /**
  265.  * User is not allowed to login to MySQL -> authentication failed
  266.  *
  267.  * @return  boolean   always true (no return indeed)
  268.  *
  269.  * @access  public
  270.  */
  271. function PMA_auth_fails()
  272. {
  273.     PMA_auth();
  274.  
  275.     return TRUE;
  276. } // end of the 'PMA_auth_fails()' function
  277.  
  278. ?>
  279.